﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Bussiness;
using Data;
using System.IO;
using System.Text.RegularExpressions;

namespace hostal
{
    public partial class RegistrarCuenta : Form
    {
        private PaisDataAccess buscarPaises = new PaisDataAccess();
        private bool nombreIncorrecto, apellidoIncorrecto, numeroDocumentoIncorrecto, nombreUsuarioIncorrecto, passwordIncorrecto, passwordsIguales, numeroDocumentoExiste, fechaNacimientoIncorrecto, nuevoPasswordITamanioncorrecto = true;
        public RegistrarCuenta()
        {
            InitializeComponent();
            dg.DataSource = buscarPaises.buscarPaises();
            manejadorPaises paises = new manejadorPaises();
            foreach (string country in paises.GetCountryList())
            {
                CBNacionalidad.Items.Add(country);
            }
            /*for (int i = 0; i < dg.RowCount; i++)
            {
                CBNacionalidad.Items.Add(dg.Rows[i].Cells[0].Value);
            }*/
        }

        private void TBNombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarLetraConEspacio(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBApellido_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarLetraConEspacio(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBNumeroDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarNumero(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBProfesion_KeyPress(object sender, KeyPressEventArgs e)
        {
        }

        private void TBEmail_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarCorreo(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBTelefono_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarNumeroConComa(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBCelular_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarNumeroConComa(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBNombreUsuario_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarLetraSinEspacio(e.KeyChar) || Validador.validarNumero(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBPassword_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarCorreo(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void BAceptar_Click(object sender, EventArgs e)
        {
            if (fechaNacimientoIncorrecto = DTPFechaNacimiento.Value > System.DateTime.Today.Date)
                EPFechaNacimiento.SetError(DTPFechaNacimiento, "La fecha de nacimiento no puede ser mayor o igual a la actual");
            else
                EPFechaNacimiento.Clear(); 
            if (nombreIncorrecto = Validador.campoVacio(TBNombre.Text))
                EPNombre.SetError(TBNombre, "Requerido");
            else
                EPNombre.Clear();
            if (apellidoIncorrecto = Validador.campoVacio(TBApellido.Text))
                EPApellido.SetError(TBApellido, "Requerido");
            else
                EPApellido.Clear();
            if (numeroDocumentoIncorrecto = Validador.campoVacio(TBNumeroDocumento.Text))
                EPNumeroDocumento.SetError(TBNumeroDocumento, "Requerido");
            else
                EPNumeroDocumento.Clear();
            if (nombreUsuarioIncorrecto = Validador.campoVacio(TBNombreUsuario.Text))
                EPNombreUsuario.SetError(TBNombreUsuario, "Requerido");
            else
                EPNombreUsuario.Clear();
            if (passwordIncorrecto = Validador.campoVacio(TBPassword.Text))
                EPPassword.SetError(TBPassword, "Requerido");
            else
                EPPassword.Clear();
            if (nuevoPasswordITamanioncorrecto = Validador.tamanioMinimo(TBPassword.Text))
                EPTamanio.SetError(TBPassword, "Tamaño minimo es de 6 caracteres");
            else
                EPTamanio.Clear();
            if (passwordsIguales=TBPassword.Text != TBPasswordRepite.Text)
                EPPasswordRepite.SetError(TBPasswordRepite, "Password Distinto");
            else
                EPPasswordRepite.Clear();
            if (!Validador.validarEmail(TBEmail.Text))
                EPEmail.SetError(TBEmail, "Formato Invalido (no es requerido)");
            else
                EPEmail.Clear();
            CuentasDataAccess registroCuenta = new CuentasDataAccess();
            if (numeroDocumentoExiste = registroCuenta.buscarNumeroDocumento(TBNumeroDocumento.Text))
                MessageBox.Show("El Numero De Documento Ya Existe");
            if (!registroCuenta.buscarUsuario(TBNombreUsuario.Text.Trim()))
            {
                if (!nombreIncorrecto && !apellidoIncorrecto && !numeroDocumentoIncorrecto && !passwordIncorrecto && !nombreUsuarioIncorrecto && !passwordsIguales && !numeroDocumentoExiste && !fechaNacimientoIncorrecto && !nuevoPasswordITamanioncorrecto)
                {
                    TBNombre.Text = Regex.Replace(TBNombre.Text, @"\s+", " ");
                    TBApellido.Text = Regex.Replace(TBApellido.Text, @"\s+", " ");
                    PersonalDataAccess registroDatosPersonal = new PersonalDataAccess();
                    if (registroDatosPersonal.registrarPersonal(TBNumeroDocumento.Text, TBNombre.Text.Trim(), TBApellido.Text.Trim(), CBNacionalidad.Text, CBSexo.Text, TBProfesion.Text, DTPFechaNacimiento.Text, TBEmail.Text, TBTelefono.Text, TBCelular.Text, TBNotas.Text) && registroCuenta.registrarCuenta(TBNumeroDocumento.Text, TBNombreUsuario.Text.Trim(), TBPassword.Text, CBTipoCuenta.Text))
                    {
                        MessageBox.Show("Se Registro Exitosamente");
                        this.Close();
                    }
                    else
                        MessageBox.Show("No Se Pudo Registrar");
                }
            }
            else
                MessageBox.Show("Ese Usuario Ya Existe");
        }

        private void BCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void CBSexo_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void TBPasswordRepite_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarCorreo(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void BAgregarPais_Click(object sender, EventArgs e)
        {
            AgregarPais agregarPais = new AgregarPais();
            agregarPais.ShowDialog();
            dg.DataSource = buscarPaises.buscarPaises();
            CBNacionalidad.Items.Clear();
            for (int i = 0; i < dg.RowCount; i++)
            {
                CBNacionalidad.Items.Add(dg.Rows[i].Cells[0].Value);
            }
        }

        private void CBNacionalidad_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void CBTipoCuenta_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }
    }
}
